home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / sys / io.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  5KB  |  182 lines

  1. /* Copyright (C) 1996, 2000, 2002, 2009 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.  
  4.    The GNU C Library is free software; you can redistribute it and/or
  5.    modify it under the terms of the GNU Lesser General Public
  6.    License as published by the Free Software Foundation; either
  7.    version 2.1 of the License, or (at your option) any later version.
  8.  
  9.    The GNU C Library is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.    Lesser General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU Lesser General Public
  15.    License along with the GNU C Library; if not, write to the Free
  16.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17.    02111-1307 USA.  */
  18.  
  19. #ifndef    _SYS_IO_H
  20. #define    _SYS_IO_H    1
  21.  
  22. #include <features.h>
  23.  
  24. __BEGIN_DECLS
  25.  
  26. /* If TURN_ON is TRUE, request for permission to do direct i/o on the
  27.    port numbers in the range [FROM,FROM+NUM-1].  Otherwise, turn I/O
  28.    permission off for that range.  This call requires root privileges.
  29.  
  30.    Portability note: not all Linux platforms support this call.  Most
  31.    platforms based on the PC I/O architecture probably will, however.
  32.    E.g., Linux/Alpha for Alpha PCs supports this.  */
  33. extern int ioperm (unsigned long int __from, unsigned long int __num,
  34.                    int __turn_on) __THROW;
  35.  
  36. /* Set the I/O privilege level to LEVEL.  If LEVEL>3, permission to
  37.    access any I/O port is granted.  This call requires root
  38.    privileges. */
  39. extern int iopl (int __level) __THROW;
  40.  
  41. #if defined __GNUC__ && __GNUC__ >= 2
  42.  
  43. static __inline unsigned char
  44. inb (unsigned short int __port)
  45. {
  46.   unsigned char _v;
  47.  
  48.   __asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (__port));
  49.   return _v;
  50. }
  51.  
  52. static __inline unsigned char
  53. inb_p (unsigned short int __port)
  54. {
  55.   unsigned char _v;
  56.  
  57.   __asm__ __volatile__ ("inb %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port));
  58.   return _v;
  59. }
  60.  
  61. static __inline unsigned short int
  62. inw (unsigned short int __port)
  63. {
  64.   unsigned short _v;
  65.  
  66.   __asm__ __volatile__ ("inw %w1,%0":"=a" (_v):"Nd" (__port));
  67.   return _v;
  68. }
  69.  
  70. static __inline unsigned short int
  71. inw_p (unsigned short int __port)
  72. {
  73.   unsigned short int _v;
  74.  
  75.   __asm__ __volatile__ ("inw %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port));
  76.   return _v;
  77. }
  78.  
  79. static __inline unsigned int
  80. inl (unsigned short int __port)
  81. {
  82.   unsigned int _v;
  83.  
  84.   __asm__ __volatile__ ("inl %w1,%0":"=a" (_v):"Nd" (__port));
  85.   return _v;
  86. }
  87.  
  88. static __inline unsigned int
  89. inl_p (unsigned short int __port)
  90. {
  91.   unsigned int _v;
  92.   __asm__ __volatile__ ("inl %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port));
  93.   return _v;
  94. }
  95.  
  96. static __inline void
  97. outb (unsigned char __value, unsigned short int __port)
  98. {
  99.   __asm__ __volatile__ ("outb %b0,%w1": :"a" (__value), "Nd" (__port));
  100. }
  101.  
  102. static __inline void
  103. outb_p (unsigned char __value, unsigned short int __port)
  104. {
  105.   __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80": :"a" (__value),
  106.             "Nd" (__port));
  107. }
  108.  
  109. static __inline void
  110. outw (unsigned short int __value, unsigned short int __port)
  111. {
  112.   __asm__ __volatile__ ("outw %w0,%w1": :"a" (__value), "Nd" (__port));
  113.  
  114. }
  115.  
  116. static __inline void
  117. outw_p (unsigned short int __value, unsigned short int __port)
  118. {
  119.   __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80": :"a" (__value),
  120.             "Nd" (__port));
  121. }
  122.  
  123. static __inline void
  124. outl (unsigned int __value, unsigned short int __port)
  125. {
  126.   __asm__ __volatile__ ("outl %0,%w1": :"a" (__value), "Nd" (__port));
  127. }
  128.  
  129. static __inline void
  130. outl_p (unsigned int __value, unsigned short int __port)
  131. {
  132.   __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80": :"a" (__value),
  133.             "Nd" (__port));
  134. }
  135.  
  136. static __inline void
  137. insb (unsigned short int __port, void *addr, unsigned long int __count)
  138. {
  139.   __asm__ __volatile__ ("cld ; rep ; insb":"=D" (addr), "=c" (__count)
  140.             :"d" (__port), "0" (addr), "1" (__count));
  141. }
  142.  
  143. static __inline void
  144. insw (unsigned short int __port, void *addr, unsigned long int __count)
  145. {
  146.   __asm__ __volatile__ ("cld ; rep ; insw":"=D" (addr), "=c" (__count)
  147.             :"d" (__port), "0" (addr), "1" (__count));
  148. }
  149.  
  150. static __inline void
  151. insl (unsigned short int __port, void *addr, unsigned long int __count)
  152. {
  153.   __asm__ __volatile__ ("cld ; rep ; insl":"=D" (addr), "=c" (__count)
  154.             :"d" (__port), "0" (addr), "1" (__count));
  155. }
  156.  
  157. static __inline void
  158. outsb (unsigned short int __port, const void *addr, unsigned long int __count)
  159. {
  160.   __asm__ __volatile__ ("cld ; rep ; outsb":"=S" (addr), "=c" (__count)
  161.             :"d" (__port), "0" (addr), "1" (__count));
  162. }
  163.  
  164. static __inline void
  165. outsw (unsigned short int __port, const void *addr, unsigned long int __count)
  166. {
  167.   __asm__ __volatile__ ("cld ; rep ; outsw":"=S" (addr), "=c" (__count)
  168.               :"d" (__port), "0" (addr), "1" (__count));
  169. }
  170.  
  171. static __inline void
  172. outsl (unsigned short int __port, const void *addr, unsigned long int __count)
  173. {
  174.   __asm__ __volatile__ ("cld ; rep ; outsl":"=S" (addr), "=c" (__count)
  175.             :"d" (__port), "0" (addr), "1" (__count));
  176. }
  177.  
  178. #endif    /* GNU C */
  179.  
  180. __END_DECLS
  181. #endif /* _SYS_IO_H */
  182.